{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Introduction\n",
    "--------------\n",
    "\n",
    "Filtering means preserving certain favored signal frequencies while simultaneously suppressing others. At first, this may seem as easy as simply removing  all the offending frequencies of interest in the Fourier transform and keeping the rest, but, as we will see, practical considerations prohibit this. There are many, many approaches to filtering and here we focus on the popular finite impulse response (FIR) filters. As the name suggests, these filters have no feedback loops, which means that they stop producing output when the input runs out. These are very popular in practice, with blazing-fast on-chip implementations and easy-to-understand, flexible design specifications. This section introduces the main concepts of FIR filter design."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Finite Impulse Response Filters as Moving Averages\n",
    "\n",
    "Finite Impulse Response (FIR) filters have the following form: \n",
    "\n",
    "$$ y_n = \\sum_{k=0}^{M-1} h_k x_{n-k} $$\n",
    "\n",
    "with real input $ x_n $ and real output $ y_n $. These are called *finite* impulse response because they stop after running out of input (i.e. there is no feedback to keep this going indefinitely on its own). These are also sometimes called *moving average* filters or *all-zero* filters. The word *taps* is used for $ M $  so a *10-tap* filter has $ M=10 $ coefficients. For example, given the two-tap filter, $ h_0 = h_1 = 1/2 $, we have\n",
    "\n",
    "$$ y_n = x_{n}/2 + x_{n-1}/2 $$\n",
    "\n",
    "For example, for input $ x_n=1 \\hspace{.5em} \\forall n \\ge 0 $,  $ y_n = 1 \\hspace{.5em} \\forall n \\ge 1  $. Note that we lose one sample in filling the filter for $ n=0 $ which means we have to wait one sample for a valid filter output. This is the filter's  *transient* state.  As another example, for input \n",
    " $ x_n= \\exp \\left( j\\pi n \\right)  \\hspace{.5em} \\forall n\\ge 0 $, then $ y_n=0 \\forall n \\ge 1  $. These two cases show that this moving average has eliminated   the highest frequency signal ($ \\omega=\\pi $) and preserved the lowest frequency signal ($ \\omega=0 $).\n",
    "\n",
    "Let's analyze this filter using the tools in the `scipy.signal` module.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nGN4gCIIW8z8+oAi6O4Ah0AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c8ea470>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from __future__ import division\n",
    "from matplotlib.pyplot import *\n",
    "from scipy import *\n",
    "from scipy import signal\n",
    "\n",
    "fig, axs = subplots(2,1,sharex=True)\n",
    "subplots_adjust( hspace = .2 )\n",
    "fig.set_size_inches((5,5))\n",
    "\n",
    "ax=axs[0]\n",
    "w,h=signal.freqz([1/2., 1/2.],1) # Compute impulse response\n",
    "ax.plot(w,20*log10(abs(h)))\n",
    "ax.set_ylabel(r\"$20 \\log_{10} |H(\\omega)| $\",fontsize=18)\n",
    "ax.grid()\n",
    "\n",
    "ax=axs[1]\n",
    "ax.plot(w,angle(h)/pi*180)\n",
    "ax.set_xlabel(r'$\\omega$ (radians/s)',fontsize=18)\n",
    "ax.set_ylabel(r\"$\\phi $ (deg)\",fontsize=18)\n",
    "ax.set_xlim(xmax = pi)\n",
    "ax.grid()\n",
    "\n",
    "#fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the figure above, the top plot shows the amplitude response of the filter (in dB) and the bottom plot shows  the phase response in degrees. At $\\omega=0 $, we have $|H(\\omega=0)|=1 $ (i.e unity-gain) which says that our moving average filter does not change the amplitude of signals at $ \\omega=0 $. We observed this earlier with $x_n=1 $ that produced $y_n=1 $. When we consider the other extreme with $\\omega= \\pi $, we have $|H(\\omega=\\pi)|=0$ which we observed earlier for $ x_n= \\exp \\left( j\\pi n \\right)  \\hspace{.5em} \\forall \\hspace{.5em} n \\ge 0 $. Thus, signals at $ \\omega=\\pi $ are completely zero-ed out by the filter.\n",
    "\n",
    "Now, let's consider a signal halfway between this two extremes:\n",
    "\n",
    "$$ x_n= \\exp \\left( j\\pi n/2 \\right)  \\hspace{.5em} \\forall \\hspace{.5em} n \\ge 0 $$\n",
    "\n",
    "The following figure shows the filter's corresponding output."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cab7208>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Ns=30 # length of input sequence\n",
    "n= arange(Ns) # sample index\n",
    "x = cos(arange(Ns)*pi/2.)\n",
    "y= signal.lfilter([1/2.,1/2.],1,x)\n",
    "\n",
    "fig,ax = subplots(1,1)\n",
    "fig.set_size_inches(10,3)\n",
    "\n",
    "ax.stem(n,x,label='input',basefmt='b-')\n",
    "ax.plot(n,x,':')\n",
    "ax.stem(n[1:],y[:-1],markerfmt='ro',linefmt='r-',label='output')\n",
    "ax.plot(n[1:],y[:-1],'r:')\n",
    "ax.set_xlim(xmin=-1.1)\n",
    "ax.set_ylim(ymin=-1.1,ymax=1.1)\n",
    "ax.set_xlabel(\"n\",fontsize=18)\n",
    "ax.legend(loc=0)\n",
    "ax.set_xticks(n)\n",
    "ax.set_ylabel(\"amplitude\",fontsize=18);\n",
    "\n",
    "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The figure above shows the input/output time-domain response of the filter when  $\\omega=\\pi/2 $. At this point, $ |H(\\omega)|^2 = 1/2 $ meaning the signal energy has been cut in half which is shown by the corresponding lower amplitude of the output signal. The signal phase has been shifted by 45 degrees. To see this, note that the input signal repeats every four samples (360 degrees). The graph above shows that the signal phase has shifted -45 degrees which is equivalent to a shift of one-half sample. Note that `signal.lfilter` automatically inserts a zero initial condition so we had to drop that one incomplete output point to line up the plots.  By interpreting the magnitude/phase plots above, we can reconcile the filter's input/output behavior in the time domain.    \n",
    "\n",
    "What happens when we lengthen our moving average filter to consider averaging over eight samples instead of two?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\users\\chenshisheng.sz-hhln\\appdata\\local\\programs\\python\\python35\\lib\\site-packages\\numpy\\lib\\scimath.py:310: RuntimeWarning: divide by zero encountered in log10\n",
      "  return nx.log10(x)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1cbb3e80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import gridspec\n",
    "\n",
    "fig=figure()\n",
    "fig.set_size_inches((10,5))\n",
    "\n",
    "gs = gridspec.GridSpec(2,2)\n",
    "gs.update( wspace=0.5, hspace=0.5)\n",
    "\n",
    "ax = fig.add_subplot(subplot(gs[0,0]))\n",
    "\n",
    "ma_length = 8 # moving average filter length\n",
    "w,h=signal.freqz(ones(ma_length)/ma_length,1)\n",
    "ax.plot(w,20*log10(abs(h)))\n",
    "ax.set_ylabel(r\"$ 20 \\log_{10}|H(\\omega)| $\",fontsize=18)\n",
    "ax.set_xlabel(r\"$\\omega$\",fontsize=18)\n",
    "ax.vlines(pi/3,-25,0,linestyles=':',color='r',lw=3.)\n",
    "ax.set_ylim(ymin=-25)\n",
    "ax.grid()\n",
    "\n",
    "ax = fig.add_subplot(subplot(gs[0,1]))\n",
    "ax.plot(w,angle(h)/pi*180)\n",
    "ax.set_xlabel(r'$\\omega$ (radians/s)',fontsize=18)\n",
    "ax.set_ylabel(r\"$\\phi $ (deg)\",fontsize=16)\n",
    "ax.set_xlim(xmax = pi)\n",
    "ax.set_ylim(ymin=-180,ymax=180)\n",
    "ax.vlines(pi/3,-180,180,linestyles=':',color='r',lw=3.)\n",
    "ax.grid()\n",
    "\n",
    "ax = fig.add_subplot(subplot(gs[1,:]))\n",
    "Ns=30\n",
    "n= arange(Ns)\n",
    "x = cos(arange(Ns)*pi/3.)\n",
    "y= signal.lfilter(ones(ma_length)/ma_length,1,x)\n",
    "\n",
    "ax.stem(n,x,label='input',basefmt='b-')\n",
    "ax.plot(n,x,':')\n",
    "ax.stem(n[ma_length-1:],y[:-ma_length+1],markerfmt='ro',linefmt='r-',label='output')\n",
    "ax.plot(n[ma_length-1:],y[:-ma_length+1],'r:')\n",
    "ax.set_xlim(xmin=-1.1)\n",
    "ax.set_ylim(ymin=-1.1,ymax=1.1)\n",
    "ax.set_xlabel(\"n\",fontsize=18)\n",
    "ax.set_xticks(n)\n",
    "ax.legend(loc=0)\n",
    "ax.set_ylabel(\"amplitude\",fontsize=18);\n",
    "\n",
    "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The figure above shows the magnitude and phase responses of the longer moving average filter. The zig-zag lines of the phase plot are due to the wrap-around of the phase as it wraps around   180 degree mark. The bottom plot shows the input/output sequences. Note that the output is delayed by the length of the input filter. Because the frequency of the input signal is $ 2\\pi/6 $, its period is $T=6$ samples the input signal repeats every six samples. According to the phase plot above, the phase at this discrete frequency is approximately 30 degrees plus the 180 degree jump, the output sequence is shifted over by half a sample ($ 30/360 = 0.5/6 $) plus the 3 samples (half the six sample period, $ 180/360=1/2 $). Note that the magnitude plot shows multiple lobes and dips at discrete frequencies where the output is zero-ed out by the filter. Thus, even though we just lengthened our moving average filter by a few samples, we have encountered much more complicated amplitude and phase behavior. We need to assemble the right tools to understand this problem in general."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Fourier Transform of the Discrete Sequence\n",
    "\n",
    "So far in these pages, we have considered samples of the Fourier transform      at discrete frequences ($ \\omega = \\frac{2\\pi}{N} k $). Now we want to consider the Fourier Transform of the discrete input at *continuous* frequency defined as the following:\n",
    "\n",
    "$$ H(\\omega) = \\sum_{n\\in \\mathbb{Z}} h_n \\exp \\left( -j\\omega n \\right) $$ \n",
    "\n",
    "Note that this is periodic, $H(\\omega)=H(\\omega+2\\pi)$.\n",
    "\n",
    "### Filter output as discrete convolution\n",
    "\n",
    "The discrete convolution of infinite sequences $ x_n $ and $ h_n $ is defined as\n",
    "\n",
    "$$ y_n = \\sum_{k\\in \\mathbb{Z}} x_k^* h_{n-k} $$\n",
    "\n",
    "where the asterisk superscript denotes  complex conjugation.  If we have a finite filter length of $ M $ ($ h_n =0, \\forall n \\notin \\{0,1,...,M-1\\} $), then the filter output reduces to\n",
    "\n",
    "$$ y_n = \\sum_{k=0}^{M-1} h_k x_{n-k} $$ \n",
    "\n",
    "Note this is closely related to but not the  same as the circular convolution we have already discussed because there is no wrap-around. However, because it is very efficient to compute this using a DFT, we need to relate these two versions of convolution. \n",
    "\n",
    "### Convolution using the DFT\n",
    "\n",
    "If $x_n$ is nonzero for $ P $ samples, then the output $ y_n $ is non-zero only for $ P+M-1 $ samples. Thus, if we zero-pad each sequence out to this length, take the DFT, multiply the DFTs, and then invert the DFTs, we obtain the results of this non-circular convolution. Let's code this up below using our last example."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "ename": "AttributeError",
     "evalue": "'function' object has no attribute 'ifft'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mAttributeError\u001b[0m                            Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-14-2c777540621d>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[0mh\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mones\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mma_length\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mma_length\u001b[0m \u001b[1;31m# filter sequence\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0myc\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mfft\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mifft\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfft\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mh\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mh\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconj\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfft\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfft\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mh\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mreal\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msubplots\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_size_inches\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mAttributeError\u001b[0m: 'function' object has no attribute 'ifft'"
     ]
    }
   ],
   "source": [
    "h=ones(ma_length)/ma_length # filter sequence\n",
    "yc=fft.ifft(fft.fft(h,len(x)+len(h)-1)*np.conj(fft.fft(x,len(x)+len(h)-1))).real\n",
    "\n",
    "fig,ax=subplots()\n",
    "fig.set_size_inches((10,2))\n",
    "ax.plot(n,yc[ma_length-1:],'o-',label='DFT method')\n",
    "ax.plot(n,y,label='lfilter')\n",
    "ax.set_title('DFT method vs. signal.lfilter',fontsize=18)\n",
    "ax.set_xlabel('n',fontsize=18)\n",
    "ax.set_ylabel('amplitude',fontsize=18)\n",
    "ax.legend(loc=0)\n",
    "ax.set_xticks(n);\n",
    "\n",
    "# fig.savefig('figure_00@.png', bbox_inches='tight', dpi=300)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The figure above compares the filter output sequence computed using the DFT and `signal.lfilter`. The only difference is the transient startup section $ M-1 $ where the taps of the filter have not filled out. This technique is fine for processing blocks of convenient size and there are many other methods (e.g. overlap-add) to compute this using different blocks that patch together the output while dealing with these transient effects.  \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Filter Transfer Functions\n",
    "\n",
    "By keeping track of summation indicies, but it is not hard to show that\n",
    "\n",
    "$$ Y(\\omega) = H(\\omega) X(\\omega) $$\n",
    "\n",
    "where $H(\\omega)$ is called the *transfer function* or the *frequency response* of the filter $ h_n $. This product of transforms is much easier to work with than convolution and allows us to understand filter performance through the properties of $ H(\\omega) $.\n",
    "\n",
    "In our last example, by simply increasing the length of the moving average filter, we obtained many more zeros in $ H(\\omega) $. Because our filters produce real outputs $ y_n $ given real inputs, $ x_n $, the zeros of the $ H(\\omega) $ must be in complex conjugate pairs. To analyze this, we need to generalize the   Fourier Transfrom to the *z-transform*. \n",
    "\n",
    "### Z-Transform\n",
    "\n",
    "The filter's z-transform is defined as the following:\n",
    "\n",
    "$$ H(z) = \\sum_n h_n z^{-n} $$ \n",
    "\n",
    "The Fourier transform is a special case of the z-transform evaluated on the unit circle ($ z=\\exp(j\\omega) $), but $z$ more generally spans the entire complex plane. Thus, to understand how our moving average filter removes frequencies, we need to compute the complex roots of the z-transform of $ h_n $ as\n",
    "\n",
    "$$ H(z) = \\sum_n h_n z^{-n} $$ \n",
    "\n",
    "This notation emphasizes the transfer function as a polynomial of the complex variable $z$. Thus, for our eight-tap moving average filter, we have\n",
    "\n",
    "$$ H(z) = \\sum_{n=0}^{M-1} h_n z^{-n} = \\frac{1}{8} \\sum_{n=0}^7 z^{-n} =\\frac{1}{8}  (1+z)(1+z^2)(1+z^4)/z^7 $$\n",
    "\n",
    "Thus, the first zero occurs when $z=-1$ or when $ \\exp(j\\omega) = -1 \\Rightarrow \\omega=\\pi$. The next pair of zeros occurs when $z= \\pm j$ which corresponds to $ \\omega = \\pm \\pi/2 $. Finally, the last four zeros are for $\\omega=\\pm \\pi/4$ and $\\omega=\\pm 3\\pi/4 $.  Notice that any filter with this  $ z+1 $ term will  eliminate the $ \\omega=\\pi $ (highest) frequency. Likewise, the term $ z-1 $ means that the filter zeros out $ \\omega=0 $. In general, the roots of the z-transform *do not* lie on the unit circle. One way to understand FIR filter design is as the judicious placement of these zeros in the complex plane so the shape of the resulting transfer function $ H(z) $ evaluated on the unit circle satisfies our design specifications.\n",
    "\n",
    "We need a special case of the Fourier transform as a tool for our analysis. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Symmetry\n",
    "\n",
    "There is a special case when the input sequence is symmetric,\n",
    "\n",
    "$$ x_n = x_{-n} $$\n",
    "\n",
    "which leads to a real-valued (i.e. zero-phase) Fourier transform property,\n",
    "\n",
    "$$ H(\\omega)= x_0+\\sum_{n \\gt 0} 2 x_n \\cos\\left(\\omega n \\right) $$\n",
    "\n",
    "When the input is anti-symmetric,\n",
    "\n",
    "$$ x_n = -x_{-n} $$\n",
    "\n",
    "$$ H(\\omega)= j\\sum_{n \\gt 0} 2 x_n \\sin\\left(\\omega n \\right) $$\n",
    "\n",
    "The Fourier transform is purely imaginary (phase = $ \\pi/2 $). Note that $ x_n = -x_{-n} $ for $ n=0 $ means that $ x_0=0 $ for this case."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Causality\n",
    "\n",
    "By changing the indexing in our first moving average filter example from  $ h_0 = h_1 = 1/2$ to $ h_{-1} = h_1 =1/2$, then we have symmetry around zero with the  resulting Fourier  transform,\n",
    "\n",
    "$$ H(\\omega) = \\frac{1}{2} \\exp \\left( j\\omega \\right) +  \\frac{1}{2} \\exp\\left( -j\\omega \\right) = \\cos(\\omega) $$\n",
    "\n",
    "which is a *real* function of frequency (with zero-phase). While this is  nice theoretically, it is not possible practically because it requires future-knowledge of input sequence as shown below\n",
    "\n",
    "$$ y_n = \\sum_{k=0}^{M-1} h_n x_{n-k} = y_n = h_{-1} x_{n+1}+h_{1} x_{n-1} = \\left( x_{n+1}+x_{n-1} \\right)/2  $$\n",
    "\n",
    "which shows that $ y_n $ depends on th future value of $ x_{n+1} $. This is what non-causal means and we must omit this kind of symmetry about zero from our class of admissible filter coefficents. However, we can scoot the  symmetric point to the center of the sequence at the cost of introducing a linear phase factor, $ \\exp\\left(-j\\omega (M-1)/2 \\right) $. Filters with linear phase do not distort the input phase across frequency. This means that all frequency components of the signal emerge at the other end of the filter in the same order they entered it. This is the concept of *group delay*. Otherwise, it would be very hard to retrieve any information embedded in the signal's phase in later  processing. Thus, we can build  linear phase causal filters with symmetric coefficients,\n",
    "\n",
    "$$ h_n = h_{M-1-n} $$\n",
    "\n",
    "or anti-symmetric coefficients,\n",
    "\n",
    "$$ h_n = -h_{M-1-n} $$\n",
    "\n",
    "by putting the point of symmetry at $ (M-1)/2 $. Note that this symmetry means that efficient hardware implementations can re-use stored filter coefficients."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Symmetry and Anti-symmetry\n",
    "\n",
    "Now we know how to build linear phase filters with symmetric or anti-symmetric coefficients and enforce causality by centering the point of symmetry, we can collect these facts and examine the resulting consequences. Given\n",
    "\n",
    "$$ h_n = \\pm h_{M-1-n} $$\n",
    "\n",
    "with $ h_n =0 \\hspace{0.5em} \\forall n \\ge M \\wedge \\forall n \\lt 0 $ \n",
    "\n",
    "For even $ M $, the z-transform then becomes,\n",
    "\n",
    "$$ H(z) = \\sum_{n=0}^{M-1} z^{-n} h_n = h_0 + h_1 z^{-1} +\\ldots + h_{M-1}z^{-M+1}= z^{-(M-1)/2} \\sum_{n=0}^{M/2-1} h_n \\left( z^{(M-1-2 n)/2} \\pm z^{-(M-1-2 n)/2}\\right) $$\n",
    "\n",
    "Likewise, for odd $ M $,\n",
    "\n",
    "$$ H(z) =  z^{-(M-1)/2} \\left\\lbrace h_{(M-1)/2}+ \\sum_{n=0}^{(M-3)/2} h_n \\left( z^{(M-1-2 n)/2} \\pm z^{-(M-1-2 n)/2}\\right) \\right\\rbrace$$\n",
    "\n",
    "By substituting $ 1/z $ and multiplying both sides by $ z^{-(M-1)} $, we obtain\n",
    "\n",
    "$$ z^{-(M-1)}H(z^{-1}) = \\pm H(z) $$\n",
    "\n",
    "This equation shows that if $z$ is a root, then so is $1/z$, and since we want a real-valued impulse response, complex roots must appear in conjugate pairs. Thus if $z_1$ is complex valued, then $ z_1^* $ is also a root and so is $1/z_1$ and $ 1/z_1^* $. Thus, one complex root  generates *four* roots.  This means that having $ M $ taps on the filter does not imply $M$ independent choices of the filter's roots or of the filter's coefficents. The symmetry conditions reduce the number of degrees of freedom available in the design.\n",
    "\n",
    "### Extracting the Real Part of the Filter Transfer Function\n",
    "\n",
    "We can evaluate these results  on the unit circle when $ h_n = +h_{M-n-1}$to obtain the following,\n",
    "\n",
    "$$ H(\\omega) = H_{re}(\\omega)\\exp \\left( -j\\omega(M-1)/2 \\right) $$\n",
    "\n",
    "where $ H_{re}(\\omega)$ is a real-valued function that can be written as\n",
    "\n",
    "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{(M/2)-1} h_n \\cos \\left( \\omega \\frac{M-1-2 n}{2}  \\right) $$\n",
    "\n",
    "for even $ M $ and as \n",
    "\n",
    "$$ H_{re}(\\omega) = h_{(M-1)/2}+ 2\\sum_{n=0}^{(M-3)/2} h_n  \\cos \\left( \\omega \\frac{M-1-2 n}{2}  \\right) $$\n",
    "\n",
    "for odd $ M $. Similar results follow when $ h_n = -h_{M-1-n} $. For $ M $ even, we have\n",
    "\n",
    "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{M/2-1} h_n \\sin \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n",
    "\n",
    "and for odd $M$.\n",
    "\n",
    "$$ H_{re}(\\omega) = 2 \\sum_{n=0}^{(M-3)/2} h_n \\sin \\left( \\omega \\frac{M-1-2 n}{2} \\right) $$\n",
    "\n",
    "By narrowing our focus to $ H_{re}(\\omega)$ and separating out the linear-phase part, we can formulate design techniques that focus solely on this real-valued function, as we will see later with Parks-McClellen FIR design. \n",
    "\n",
    "The table below shows the number of *independent* filter coefficients that must be specified for a FIR filter in each case.\n",
    "\n",
    "<table border=\"1\">\n",
    "    <tr>\n",
    "    <th>  </th>\n",
    "    <th> even M</th>\n",
    "    <th> odd M </th>\n",
    "    </tr>\n",
    "    <tr>\n",
    "        <td>symmetric</td><td>M/2</td><td style=\"text-align:center\">(M+1)/2</td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "        <td>anti-symmetric</td><td>M/2</td><td style=\"text-align:center\"> (M-1)/2</td>\n",
    "    </tr>\n",
    "</table> \n",
    "\n",
    "The design problem is finding the coefficents that satisfy a  filter's specifications. Picking any of the cases shown in the table depends on the application. For example, for odd $ M $ and the anti-symmetric case, $ H_{re}(\\omega=0)= H_{re}(\\omega=\\pi)= 0 $ so this would be a bad choice for high or low pass filters. \n",
    "\n",
    "Because many books refer to the items in this table as type-I through type-IV filters, I'm including this terminology in the table below. \n",
    "\n",
    "<table border=\"1\">\n",
    "    <tr>\n",
    "    <th>  </th>\n",
    "    <th> even M</th>\n",
    "    <th> odd M </th>\n",
    "    </tr>\n",
    "    <tr>\n",
    "        <td>symmetric</td><td>type-I</td><td style=\"text-align:center\">type-II</td>\n",
    "    </tr>\n",
    "    <tr>\n",
    "        <td>anti-symmetric</td><td>type-III</td><td style=\"text-align:center\"> type-VI</td>\n",
    "    </tr>\n",
    "</table> "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Example\n",
    "\n",
    "We can use these results to reconsider our earlier result for the two-tap moving average filter for which $ M=2 $ and $ h_0 = 1/2 $. Then,\n",
    "\n",
    "$$ H_{re}(\\omega) =  \\cos \\left( \\omega/2 \\right) $$\n",
    "\n",
    "with phase,\n",
    "\n",
    "$$ \\exp \\left( -j\\omega(M-1)/2 \\right) = \\exp \\left( -j\\omega/2 \\right)$$\n",
    "\n",
    "which equals $ \\exp (-j\\pi/4) $ when $ \\omega = \\pi/2 $ as we observed numerically earlier."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Summary"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this section, we began our work with FIR filters by considering the concepts of linear phase, symmetry, and causality. By defining FIR filter coefficients symmetrically, we were able to enforce both causality and linear phase. We introduced the continuous-frequency version of the Fourier Transform and its relationship to the Discrete Fourier Transfrom (DFT). We demonstrated how the circular convolution of the DFT can be used to compute the continuous-frequency Fourier Transform version of the convolution. Then, we  introduced the z-transform as a more general tool than the Fourier transform for understanding the role of zeros in filter design. All this led us to conditions on the filter coeffients that satisfy our practical requirements of linear phase (no phase-distortions across frequency) and causality (no future knowledge of inputs). Finally, we considered the mathematical properties of FIR filters that apply to *any* design.\n",
    "\n",
    "Sadly, all this work is exactly backwards because all our examples so far started with a set of filter coefficients ($ h_n $) and then drew conclusions, numerically and analytically, about their consequences. In a real, situation, we start with a desired filter specification, and *then* (by various means) come up with the corresponding filter coefficients. Our next section explores this topic.\n",
    "\n",
    "\n",
    "As usual, the corresponding IPython notebook for this post  is available for download [here](https://github.com/unpingco/Python-for-Signal-Processing/blob/master/Filtering.ipynb). \n",
    "\n",
    "Comments and corrections welcome!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "References\n",
    "---------------\n",
    "\n",
    "* Proakis, John G. ,*Digital signal processing: principles algorithms and applications*. Pearson Education India, 2001."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%qtconsole"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<button onclick=\"$('.input, .output_stderr, .output_error').toggle();\">Toggle Code</button>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%HTML\n",
    "<button onclick=\"$('.input, .output_stderr, .output_error').toggle();\">Toggle Code</button>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
